package com.asa.suanming;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.asa.chart.suanming.AlgoVisualizer;

/**
 * 	奇门遁甲
 * @author asa
 *
 */
public class QiMengDunJia {
	
	//十天干
	public static final String[] tiangan = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
	//十二地支
	public static final String[] dizhi = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
	//八卦 八卦：乾卦（☰）；坎卦（☵）；艮卦（☶）；震卦（☳）；巽卦（☴）；离卦（☲）；坤卦（☷）；兑卦（☱）；
	public static final String[] bagua2shi = {"乾卦（☰）","坎卦（☵）","艮卦（☶）","震卦（☳）","巽卦（☴）","离卦（☲）","坤卦（☷）","兑卦（☱）"};
	//范围 东西南北 东南 西南 西北 东北 中
	public static final String[] fangwei = {"东南","南","西南","东","中","西","东北","北","西北"};
	
	
	
	//五行：金木水火土
	public static final String[] wuxing = {"金","木","水","火","土"};
	//五季:春	夏	长夏		秋		冬
	public static final String[] wuji = {"春","夏","长夏","秋","冬"};

	
	
	
	
	
	//九宫 九宫是由十干里面得来的 它隐去了甲 甲隐盾掉了
	//"乙","丙","丁"是 三奇
	//"戊","己","庚","辛","壬","癸"是 六仪
	//这九个放入到九宫之中，就是一局了
	
	public static List<String> cixu() {
		
		List<String> result = new ArrayList<String>(); 
		result.add(tiangan[0]);//我把甲放在0这个位置，运算的时候从1开始，就算是把甲隐去了
		for (int i = 4; i < tiangan.length; i++) {
			result.add(tiangan[i]);
		}
		
		for (int i = 3; i >0; i--) {
			result.add(tiangan[i]);
		}
		
		return result;
	}
	
	/**
	 * 	返回一个阳局，4就是阳戊四
	 * @param number
	 * @return
	 */
	public static List<String> cixu2yang(List<String> asa,int number){
		
		// 4	9	2
		// 3	5	7
		// 8	1	6		
		if (number>9||number<1) {
			throw new RuntimeException("number参数比较从1到9");
		}
		
		String[] result = new String[10];
		result[0] = tiangan[0];
		for (int i = 1; i < asa.size(); i++) {
			
			result[number] = asa.get(i);
			
			number++;
			if (number>9) {
				number = 1;
			}
			
		}
		
		List<String> asList = Arrays.asList(result);
		
		
		
		return asList;
	}
	
	/**
	 * 	返回一个阴局，4就是阴戊四
	 * @param number
	 * @return
	 */
	public static List<String> cixu2yin(List<String> asa,int number){
		
		// 4	9	2
		// 3	5	7
		// 8	1	6		
		if (number>9||number<1) {
			throw new RuntimeException("number参数比较从1到9");
		}
		
		String[] result = new String[10];
		result[0] = tiangan[0];
		for (int i = 1; i < asa.size(); i++) {
			
			result[number] = asa.get(i);
			
			number--;
			if (number<1) {
				number = 9;
			}
			
		}
		
		List<String> asList = Arrays.asList(result);
		
		
		
		return asList;
	}
	
	/**
	 * 	将局放入到数组中，以便展示，这里我要不要搞成二维数组呢？
	 * @param asa
	 * @param number
	 * @return
	 */
	public static List<String> tiangan2string(List<String> asa){
		
		// 4	9	2
		// 3	5	7
		// 8	1	6
		
		List<String> result = new ArrayList<String>();
		result.add(asa.get(0));
		result.add(asa.get(4));
		result.add(asa.get(9));
		result.add(asa.get(2));
		result.add(asa.get(3));
		result.add(asa.get(5));
		result.add(asa.get(7));
		result.add(asa.get(8));
		result.add(asa.get(1));
		result.add(asa.get(6));
		
		return result;
	}

	public static List<String> bagua2string(String[] asa){
		
//		"乾卦（☰）","坎卦（☵）","艮卦（☶）","震卦（☳）","巽卦（☴）","离卦（☲）","坤卦（☷）","兑卦（☱）"
		
		List<String> result = new ArrayList<String>();
		result.add(asa[4]);
		result.add(asa[5]);
		result.add(asa[6]);
		result.add(asa[3]);
		result.add("中");
		result.add(asa[7]);
		result.add(asa[2]);
		result.add(asa[1]);
		result.add(asa[0]);
		
		return result;
	}
	
	
	
	
	
	public static void main(String[] args) {
		
		List<String> cixu = cixu();
		
		List<String> cixu2yang = cixu2yang(cixu, 3);
		
		List<String> cixu2string = tiangan2string(cixu2yang);
		List<String> bagua2string = bagua2string(bagua2shi);

		List<Block9> put2 = new ArrayList<Block9>();
		
		
		for (int i = 1; i < cixu2string.size(); i++) {
			System.out.println(cixu2string.get(i));
			Block9 block9 = new Block9();
			block9.setTiangan(cixu2string.get(i));
			block9.setBagua2shi(bagua2string.get(i-1));
			block9.setFangwei(fangwei[i-1]);
			
			String string_fangwei = fangwei[i-1];
			if (string_fangwei=="东") {
				block9.setWuxing(wuxing[1]);//木
				block9.setWuji(wuji[0]);//春
			}else if(string_fangwei=="西"){
				block9.setWuxing(wuxing[0]);//金
				block9.setWuji(wuji[3]);//秋

			}else if(string_fangwei=="南"){
				block9.setWuxing(wuxing[3]);//火
				block9.setWuji(wuji[1]);//夏

			}else if(string_fangwei=="北"){
				block9.setWuxing(wuxing[2]);//水
				block9.setWuji(wuji[4]);//冬

			}else if(string_fangwei=="中"){
				block9.setWuxing(wuxing[4]);//土
				block9.setWuji(wuji[2]);//长夏

			}else {
				block9.setWuxing("");
				block9.setWuji("");//长夏

			}
			
			
			
			if(i%3 ==1) {
				block9.setYinyang("阳");
			}else if (i%3 ==0) {
				block9.setYinyang("阴");
			}else if (i==2) {
				block9.setYinyang("阴");
			}else if (i==8) {
				block9.setYinyang("阳");
			}else {
				block9.setYinyang("无");
			}
			
			put2.add(block9);
		}
		
		
		
		//这个好像是写死的，不知道是为什么
		//这个在九宫图里面是有相生相克相泄相耗的关系的，五行之前的关系
		put2.get(0).setWuxing("木");
		put2.get(1).setWuxing("火");
		put2.get(2).setWuxing("土");
		put2.get(3).setWuxing("木");
		put2.get(4).setWuxing("土");
		put2.get(5).setWuxing("金");
		put2.get(6).setWuxing("土");
		put2.get(7).setWuxing("水");
		put2.get(8).setWuxing("金");

		
		
		
		
		
		
		
		//阳顺阴逆 阳死阴生
		AlgoVisualizer algoVisualizer = new AlgoVisualizer(put2);

		
		
	}
	
	
	
	

}







/**
 * 可能有点用
三元：上元；中元；下元；
三奇：乙（日）奇；丙（月）奇；丁（星）奇；
六仪：戊己庚辛壬癸
十天干：甲乙丙丁戊己庚辛壬癸；
天干十二运：长生、沐浴、冠带、临官、帝旺（好的阶段）；衰、病、死、墓、绝（不好阶段）；胎、养（一般阶段）；
十二地支：子丑寅卯辰巳午未申酉戌亥；
五行：金木水火土；
五行相生：金生水；水生木；木生火；火生土；土生金；
五行相克：金克木；木克土；土克水；水克火；火克金；
五行相耗：金耗火；火耗水；水耗土；土耗木；木耗金；
五行相泄：金泄土；土泄火；火泄木；木泄水；水泄金；
五行相助：金助金；水助水；木助木；火助火；土助土；
五行状态：旺；相；休；囚；死；
	当令者旺，令生者相，生令者休，克令者囚，令克者死。当令者旺，令生者相，生令者休，克令者囚，令克者死。
八门：开门；休门；生门；伤门；杜门；景门；死门；惊门；
八门状态：旺相休囚死
八神：值符；腾蛇；太阴；六合；白虎；玄武；九地；九天；
八卦：乾卦（☰）；坎卦（☵）；艮卦（☶）；震卦（☳）；巽卦（☴）；离卦（☲）；坤卦（☷）；兑卦（☱）；
九宫：乾宫；坎宫；艮宫；震宫；中宫；巽宫；离宫；坤宫；兑宫；
九星：天蓬星；天芮星；天冲星；天辅星；天禽星；天心星；天柱星；天任星；天英星；
九星状态：旺；相；休；囚；废；
二十四节气：立春、雨水、惊蛰、春分、清明、谷雨、立夏、小满、芒种、夏至、小暑、大暑、立秋、处暑、白露、秋分、寒露、霜降、立冬、小雪、大雪、冬至、小寒、大寒；
二十四节气歌：春雨惊春清谷天，夏满芒夏暑相连；秋处露秋寒霜降，冬雪雪冬小大寒。

数字转化成五行取模
	%1水
	%2火
	%3木
	%4金
	%5土

 */




